package zevent

// 应用层事件消息

// EventType 事件类型
type EventType int32

const (
	EventTypeCmd        EventType = iota //命令行指令类型
	EventTypeSchedule                    //定时任务
	EventTypeTcpRequest                  //tcp消息
)

var (
	// EventExecMap 事件类型回调列表
	EventExecMap = make(map[EventType]func(*Event))
)

// Event
// @Description: 事件
type Event struct {
	Type EventType   // 类型
	Data interface{} // 参数
}

// EventAdd 添加事件类型
// @param tp
// @param fn
func EventAdd(tp EventType, fn func(*Event)) {
	EventExecMap[tp] = fn
}

// Exec 执行事件
// @receiver event
func (event *Event) Exec() {
	fn, ok := EventExecMap[event.Type]
	if ok {
		fn(event)
	}
}
